perm filename EADD2.2[EAL,HE]1 blob sn#679409 filedate 1982-09-27 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	{$NOMAIN	Editor: aux routines for addStmnt }
C00005 00003	procedure addst2 (nextLinep: cursorpp sp: statementp) external
C00009 ENDMK
C⊗;
{$NOMAIN	Editor: aux routines for addStmnt }

%include eedit.hdr;

{ Externally defined routines from elsewhere: }

	(* From PAUX1 *)
function checkArg(n: nodep; d: datatypes): nodep;		external;

	(* From PAUX2 *)
function evalOrder(what,last: nodep; pcons: boolean): nodep;	external;
procedure relExpr(n: nodep);					external;

	(* From ETOKEN *)
procedure eDimCheck(n,d: nodep);				external;

	(* From EPUTST *)
procedure putstmnt(s: statementp; indent, plevel: integer);	external;

	(* From EEXPAR *)
function eExprParse: nodep;					external;
procedure eGetArgs(opn: nodep);					external;

	(* From EPAR3A *)
procedure eForParse(st: statementp);				external;
procedure eAffixParse(st: statementp);				external;
procedure eAssignParse(st: statementp);				external;
procedure eUnfixParse(st: statementp);				external;
procedure eEnableParse(st: statementp);				external;

	(* From EPAR3F *)
procedure eMoveParse(st: statementp; bp: boolean);		external;
procedure eStopParse(st: statementp);				external;

	(* From PP *)
procedure ppLine; 						external;
procedure ppOutNow; 						external;
procedure ppChar(ch: ascii); 					external;
procedure pp5(ch: c5str; length: integer); 			external;
procedure pp10(ch: cstring; length: integer); 			external;
procedure pp10L(ch: cstring; length: integer);			external;
procedure pp20(ch: c20str; length: integer); 			external;
procedure pp20L(ch: c20str; length: integer); 			external;

procedure addst2 (nextLinep: cursorpp; sp: statementp); external;
procedure addst2 ;
 var b: boolean;

 begin
 with eCurToken, sp↑ do 
  case stmnt of
pausetype:	begin
		ptime := checkArg(eExprParse,svaltype);
		eDimCheck(ptime,timedim↑.dim);	(* right dimension? *)
		exprs := evalOrder(ptime,nil,true);
		end;
printtype,
prompttype,
aborttype:	begin
		pnode↑.arg2 := nil;
		eGetArgs(pnode);	(* pretend we just saw a queryop *)
		plist := pnode↑.arg2;	(* store away pointer to print list *)
		if plist <> nil then
		  begin
		  exprs := evalOrder(plist,nil,false);
		  setUp := true;
		  setCursor := false;
		  curLine := 1;
		  putStmnt(sp,nextLinep↑.ind,99);	(* see how long we are *)
		  setUp := false;
		  end;
		debugLev := 0;		(* for abort *)
		end;
assigntype:	begin				(* shouldn't get here *)
		eBackup := true;
		eAssignParse(sp);
		end;
signaltype,
waittype:	begin
		event := checkArg(eExprParse,eventtype);
		exprs := nil;
		with event↑ do      		(* make sure it's a variable *)
		 begin
		 b := (ntype = leafnode) and (ltype = varitype);	(* hack *)
		 if not (b or ((ntype = exprnode) and (op = arefop))) then
		   begin		(* no good *)
		   pp20L(' Need an event varia',20); pp10('ble here  ',8); ppLine; 
		   relExpr(event);
		   event := nil;
		   end
		  else
		   if ntype <> leafnode then exprs := evalOrder(arg2,nil,true);
		 end;
		end;
enabletype,
disabletype:	begin
		eEnableParse(sp);
		end;
affixtype:	begin
		fieldNum := 1;
		eAffixParse(sp);
		setUp := true;	(* check if it'll takes two lines to print *)
		putStmnt(sp,cursorStack[cursor].ind,99);
		setUp := false;
		end;
unfixtype:	begin
		eUnfixParse(sp);
		end;
movetype,
opentype,
closetype,
centertype,
operatetype:	begin
		clauses := nil;
		eMoveParse(sp,true);
		end;
stoptype:	begin
		eStopParse(sp);
		end;
retrytype:	begin
		(* *** need to check in the body of an error handler *** *)
		(* *** also need to set .olevel *** *)
		end;
wristtype:	begin (* wristParse(sp); *) end;
(* nothing to do for: setbasetype *)
(* *** for now we're ignoring: requiretype, definetype & dimdeftype *** *)
otherwise {do nothing};
  end;
end;